home *** CD-ROM | disk | FTP | other *** search
Java Source | 1997-07-13 | 3.9 KB | 126 lines |
- /*
- * Copyright (c) 1995-1997 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Permission to use, copy, modify, and distribute this software
- * and its documentation for NON-COMMERCIAL purposes and without
- * fee is hereby granted provided that this copyright notice
- * appears in all copies. Please refer to the file "copyright.html"
- * for further important copyright and licensing information.
- *
- * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
- * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
- * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
- */
- import java.applet.Applet;
- import java.awt.*;
- import java.awt.event.ContainerEvent;
- import java.awt.event.ContainerListener;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.util.Vector;
-
- public class ContainerDemo extends Applet
- implements ContainerListener,
- ActionListener {
- TextArea display;
- Panel buttonPanel;
- Button addButton, removeButton, clearButton;
- Vector buttonList;
-
- public void init() {
- //Initialize an empty list of buttons.
- buttonList = new Vector(10, 10);
-
- //Create all the components.
- addButton = new Button("Add a button");
- addButton.addActionListener(this);
-
- removeButton = new Button("Remove a button");
- removeButton.addActionListener(this);
-
- buttonPanel = new Panel();
- buttonPanel.addContainerListener(this);
-
- display = new TextArea(5, 20);
- display.setEditable(false);
-
- clearButton = new Button("Clear text area");
- clearButton.addActionListener(this);
-
- //Lay out the components.
- GridBagLayout gridbag = new GridBagLayout();
- GridBagConstraints c = new GridBagConstraints();
- setLayout(gridbag);
- c.fill = GridBagConstraints.BOTH; //Fill entire cell.
-
- c.weighty = 1.0; //Button area and message area have equal height.
- c.gridwidth = GridBagConstraints.REMAINDER; //end of row
- gridbag.setConstraints(display, c);
- add(display);
-
- c.weighty = 0.0;
- gridbag.setConstraints(clearButton, c);
- add(clearButton);
-
- c.weightx = 1.0; //Add/remove buttons have equal width.
- c.gridwidth = 1; //NOT end of row
- gridbag.setConstraints(addButton, c);
- add(addButton);
-
- c.gridwidth = GridBagConstraints.REMAINDER; //end of row
- gridbag.setConstraints(removeButton, c);
- add(removeButton);
-
- c.weighty = 1.0; //Button area and message area have equal height.
- gridbag.setConstraints(buttonPanel, c);
- add(buttonPanel);
- }
-
- public void componentAdded(ContainerEvent e) {
- displayMessage(" added to ", e);
- }
-
- public void componentRemoved(ContainerEvent e) {
- displayMessage(" removed from ", e);
- }
-
- void displayMessage(String action, ContainerEvent e) {
- display.append(((Button)e.getChild()).getLabel()
- + " was"
- + action
- + e.getContainer().getClass().getName()
- + "\n");
- }
-
- /*
- * This could have been implemented as two or three
- * classes or objects, for clarity.
- */
- public void actionPerformed(ActionEvent e) {
- Object source = e.getSource();
-
- if (source == addButton) {
- Button newButton = new Button("Button #"
- + (buttonList.size() + 1));
- buttonList.addElement(newButton);
- buttonPanel.add(newButton);
- buttonPanel.validate(); //Make the button show up.
- } else if (source == removeButton) {
- int lastIndex = buttonList.size() - 1;
- try {
- Button nixedButton = (Button)buttonList.elementAt(lastIndex);
- buttonPanel.remove(nixedButton);
- buttonList.removeElementAt(lastIndex);
- buttonPanel.validate(); //Make the button disappear.
- } catch (ArrayIndexOutOfBoundsException exc) {
- }
- } else if (source == clearButton) {
- display.setText("");
- }
- }
- }
-
-